package controller;

import helper.AngepassteException;
import helper.Export;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.EbenenRepository;

/**
 * Servlet implementation class Vorschau
 */
@WebServlet({ "/Vorschau", "/vorschau", "/Vorschau.html", "/vorschau.html" })
public class Vorschau extends SessionControll {
	private static final long serialVersionUID = 1L;
    private static EbenenRepository ebenenRepository; 
    private static boolean PDF;
	
    /**
     * @see HttpServlet#HttpServlet()
     */
    public Vorschau() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		try {
			int id = -1;
			if(request.getParameter("ebenenId") == null) {		
				throw new AngepassteException("Fehlende Ebenen ID");
			} else {
				id = Integer.parseInt(request.getParameter("ebenenId"));
			}
			long ebenenVer = -1;
			if(request.getParameter("ebenenVer") != null) {
				ebenenVer = Long.parseLong(request.getParameter("ebenenVer"));
			}
		
			ebenenRepository = EbenenRepository.getInstance();
			if(ebenenVer == -1){
				ebenenVer = ebenenRepository.getNeusteEbeneNachId(id).getErstellungszeit();
				PDF = Export.generiereAktuellsteVersion(id, ebenenVer);
			}else{
				PDF = Export.generiereVersionierteVersion(id, ebenenVer);
			}
			if(PDF == false){
				request.setAttribute("pfad", "pdf/pdf.jsp?id=-1&ebenenVer=-2");
				request.setAttribute("tabsController", "Vorschau"); // um die Tabs richtig anzuzeigen
				request.setAttribute("id", "-1");
				request.setAttribute("ebenenVer", "-2");
				
				RequestDispatcher view;
				view = request.getRequestDispatcher("Vorschau.jsp");
				view.forward(request, response);
			}else{
				request.setAttribute("pfad", "pdf/pdf.jsp?id="+id+"&ebenenVer="+ebenenVer);
				request.setAttribute("tabsController", "Vorschau"); // um die Tabs richtig anzuzeigen
				request.setAttribute("id", ""+id);
				request.setAttribute("ebenenVer", ""+ebenenVer);
				
				RequestDispatcher view;
				view = request.getRequestDispatcher("Vorschau.jsp");
				view.forward(request, response);
			}
		} catch (ClassNotFoundException e) {
			new helper.Logging("Fehler F130",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
			response.sendRedirect("Fehler?weiterleitung=AufgabenListe&fehler=Es konnte nicht auf die Datenbank zugegriffen werden! Bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F130)");
		} catch (SQLException e) {
			new helper.Logging("Fehler F131",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
			response.sendRedirect("Fehler?weiterleitung=AufgabenListe&fehler=Es konnte nicht auf die Datenbank zugegriffen werden! Bitte versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F131)");
		} catch (NumberFormatException e) {
			new helper.Logging("Fehler F132",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
			response.sendRedirect("Fehler?weiterleitung=AufgabenListe&fehler=Keine Vorschauseite ausgewählt. Versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F132)");
		} catch (Exception e) {
			new helper.Logging("Fehler F133",e.toString(), benutzerRepository.getBenutzerNachEmail((String) request.getSession().getAttribute("email")), (byte)1);
			e.printStackTrace();
			response.sendRedirect("Fehler?weiterleitung=AufgabenListe&fehler=Keine Vorschauseite ausgewählt. Versuchen Sie es erneut oder kontaktieren Sie einen Administrator. (F133)");
		}
		
		
	}
}
